GUET-CTF2019 number_game

[GUET-CTF2019]number_game

ida64打开

image-20220822223502571

分析main函数可知,输入经过两次加密后进入到验证环节

decode1

image-20220822223646747

decode2

image-20220822223802990

可以看出decode1和decode2都是二叉树

decode1是递归实现的建树的过程,decode2是中序遍历

看完加密,再去看验证函数

image-20220822224713833

两层0-4的循环,加上[&flag + 5 * i + j]猜测只是个5*5的数组

进一步分析flag数组里面的内容

image-20220822224839491

最后得出这是个5*5的数独,两个==的判断一个是横着的一排无重复,另一个是竖着的一列无重复,然后将这个数独完成后得出加密后的flag就是0421421430

再逆推最开始的输入

既然加密只改变输入的顺序,直接动态调试

修改汇编让check函数失效,输入0123456789

image-20220822224504923

可以看出0123456789已经变成了7381940526

再将0421421430按照对应关系回填

1
flag{1134240024}